-
Notifications
You must be signed in to change notification settings - Fork 126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpf: fix ktls panic with sockmap and add tests #8509
base: bpf-next_base
Are you sure you want to change the base?
Conversation
Upstream branch: 654765b |
a814b9b
to
c4bbe91
Compare
Upstream branch: d0da259 |
9c228ae
to
e3cc193
Compare
c4bbe91
to
072f756
Compare
Upstream branch: e8af068 |
e3cc193
to
41a6f3e
Compare
072f756
to
d5f119f
Compare
Upstream branch: ac13c50 |
41a6f3e
to
ca1d7a9
Compare
d5f119f
to
038d931
Compare
Upstream branch: 7042882 |
ca1d7a9
to
ca30cc6
Compare
038d931
to
57dcc3a
Compare
Upstream branch: bd4319b |
ca30cc6
to
9b31daf
Compare
57dcc3a
to
d7a737b
Compare
Upstream branch: e0525cd |
9b31daf
to
8be5a14
Compare
d7a737b
to
74bd319
Compare
Upstream branch: 63817c7 |
8be5a14
to
1cc98ba
Compare
74bd319
to
5ed7ad7
Compare
Upstream branch: 201b62c |
1cc98ba
to
c587fb7
Compare
5ed7ad7
to
1be57b8
Compare
4d1d6fc
to
e14a0d8
Compare
Upstream branch: f3f8649 |
1fc29d1
to
0d34d7f
Compare
e14a0d8
to
503edd4
Compare
Upstream branch: ae0a457 |
0d34d7f
to
7799ce6
Compare
7e623dc
to
156a3ac
Compare
Upstream branch: 6ca2162 |
7799ce6
to
24564a9
Compare
156a3ac
to
50dba77
Compare
Upstream branch: a259804 |
24564a9
to
a2089e4
Compare
50dba77
to
ce294a5
Compare
Upstream branch: 79db658 |
a2089e4
to
c5c704d
Compare
ce294a5
to
e34fe93
Compare
Upstream branch: e16e64f |
c5c704d
to
cc4e20b
Compare
e34fe93
to
8c0b07b
Compare
Upstream branch: 51d6504 |
cc4e20b
to
f26a052
Compare
8c0b07b
to
c55d243
Compare
Upstream branch: 307ef66 |
f26a052
to
358ff64
Compare
c55d243
to
5cf614b
Compare
[ 2172.936997] ------------[ cut here ]------------ [ 2172.936999] kernel BUG at lib/iov_iter.c:629! ...... [ 2172.944996] PKRU: 55555554 [ 2172.945155] Call Trace: [ 2172.945299] <TASK> [ 2172.945428] ? die+0x36/0x90 [ 2172.945601] ? do_trap+0xdd/0x100 [ 2172.945795] ? iov_iter_revert+0x178/0x180 [ 2172.946031] ? iov_iter_revert+0x178/0x180 [ 2172.946267] ? do_error_trap+0x7d/0x110 [ 2172.946499] ? iov_iter_revert+0x178/0x180 [ 2172.946736] ? exc_invalid_op+0x50/0x70 [ 2172.946961] ? iov_iter_revert+0x178/0x180 [ 2172.947197] ? asm_exc_invalid_op+0x1a/0x20 [ 2172.947446] ? iov_iter_revert+0x178/0x180 [ 2172.947683] ? iov_iter_revert+0x5c/0x180 [ 2172.947913] tls_sw_sendmsg_locked.isra.0+0x794/0x840 [ 2172.948206] tls_sw_sendmsg+0x52/0x80 [ 2172.948420] ? inet_sendmsg+0x1f/0x70 [ 2172.948634] __sys_sendto+0x1cd/0x200 [ 2172.948848] ? find_held_lock+0x2b/0x80 [ 2172.949072] ? syscall_trace_enter+0x140/0x270 [ 2172.949330] ? __lock_release.isra.0+0x5e/0x170 [ 2172.949595] ? find_held_lock+0x2b/0x80 [ 2172.949817] ? syscall_trace_enter+0x140/0x270 [ 2172.950211] ? lockdep_hardirqs_on_prepare+0xda/0x190 [ 2172.950632] ? ktime_get_coarse_real_ts64+0xc2/0xd0 [ 2172.951036] __x64_sys_sendto+0x24/0x30 [ 2172.951382] do_syscall_64+0x90/0x170 ...... After calling bpf_exec_tx_verdict(), the size of msg_pl->sg may increase, e.g., when the BPF program executes bpf_msg_push_data(). If the BPF program sets cork_bytes and sg.size is smaller than cork_bytes, it will return -ENOSPC and attempt to roll back to the non-zero copy logic. However, during rollback, msg->msg_iter is reset, but since msg_pl->sg.size has been increased, subsequent executions will exceed the actual size of msg_iter. ''' iov_iter_revert(&msg->msg_iter, msg_pl->sg.size - orig_size); ''' The changes in this commit are based on the following considerations: 1. When cork_bytes is set, rolling back to non-zero copy logic is pointless and can directly go to zero-copy logic. 2. We can not calculate the correct number of bytes to revert msg_iter. Assume the original data is "abcdefgh" (8 bytes), and after 3 pushes by the BPF program, it becomes 11-byte data: "abc?de?fgh?". Then, we set cork_bytes to 6, which means the first 6 bytes have been processed, and the remaining 5 bytes "?fgh?" will be cached until the length meets the cork_bytes requirement. However, some data in "?fgh?" is not within 'sg->msg_iter' (but in msg_pl instead), especially the data "?" we pushed. So it doesn't seem as simple as just reverting through an offset of msg_iter. 3. For non-TLS sockets in tcp_bpf_sendmsg, when a "cork" situation occurs, the user-space send() doesn't return an error, and the returned length is the same as the input length parameter, even if some data is cached. Additionally, I saw that the current non-zero-copy logic for handling corking is written as: ''' line 1177 else if (ret != -EAGAIN) { if (ret == -ENOSPC) ret = 0; goto send_end; ''' So it's ok to just return 'copied' without error when a "cork" situation occurs. Fixes: fcb14cb ("new iov_iter flavour - ITER_UBUF") Fixes: d3b18ad ("tls: add bpf support to sk_msg handling") Signed-off-by: Jiayuan Chen <[email protected]>
Upstream branch: 9aa8fe2 |
add ktls selftest for sockmap Test results: sockmap_ktls/sockmap_ktls disconnect_after_delete IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls update_fails_when_sock_has_ulp IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls disconnect_after_delete IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls update_fails_when_sock_has_ulp IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls disconnect_after_delete IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls update_fails_when_sock_has_ulp IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls disconnect_after_delete IPv4 SOCKMAP:OK sockmap_ktls/sockmap_ktls update_fails_when_sock_has_ulp IPv4 SOCKMAP:OK sockmap_ktls/tls simple offload:OK sockmap_ktls/tls tx cork:OK sockmap_ktls/tls tx cork with push:OK sockmap_ktls/tls simple offload:OK sockmap_ktls/tls tx cork:OK sockmap_ktls/tls tx cork with push:OK sockmap_ktls:OK Signed-off-by: Jiayuan Chen <[email protected]>
358ff64
to
d4900d7
Compare
Pull request for series with
subject: bpf: fix ktls panic with sockmap and add tests
version: 2
url: https://patchwork.kernel.org/project/netdevbpf/list/?series=935422